// pages/personApply/personApply.js
import WxValidate from "../../utils/WxValidate"
import {formatTime} from "../../utils/util"
const app = getApp()
Page({
  /**
   * 页面的初始数据
   */
  data: {
    msg: false,
    check: false,
    checkValue: 1,
    showProtocal: false,
    //电子协议书开关 
    content: '本规则适用于用户提供代练服务的相关交易事项，用户须接受并遵守 本《交易猫接单协议》的内容。用户通过交易猫打手板平台开展代练服务合作，即授权 并同意接受交易猫按照平台规则对双方的交易进行撮合、提供技术支持，对交易产生的 争议进行调解处理等平台服务。<br>一、签约主体<br> 本协议缔约方为交易猫打手版 APP用户（以下简称“用户”或“您”）与本平台（下称“交易猫打手版平台”）的所有者广 州交易猫信息技术有限公司（下称“交易猫”）。<br>二、定义：<br>1、号主：发布 代练任务的游戏帐号所有人；<br>2、用户：承接号主的代练任务并提供代练服务的用 户；<br>3、代练，是指用户、号主双方通过交易猫平台服务, 由用户按照号主发布的 代练任务要求完成代练服务，从而得到号主给付的相应的服务费用。 <br> 4、保证 金：用户根据本协议约定的条款和条件及本网站其他公示规则的规定，授权并使用支付 宝服务按照交易猫要求的方式冻结的，当用户违反本协议约定或本网站其他公示规则的 规定时用于承担违约责任的资金。保证金包含效率保证金、安全保证金和接单保证金。 <br>5、支付宝服务：指由支付宝（中国）网络技术有限公司（以下简称“支付宝公 司”）向您提供的“支付宝”软件服务系统及附随为您提供的代收代付货款的中介服务。 支付宝服务具体内容，详见您与支付宝公司之间签署生效的《支付宝服务协议》之约 定。',
    personInfo: {
      realName: '',
      identityNo: '',
      identityImg: '',
      status: '未审核', //3个状态，未审核 通过审核 未通过审核 
      applyTime: ''
    },
    avatarUrl: '',
  },
  //姓名，证件号,输入框防抖 
  timeID: 0,
  //定时器ID 
  handleInput(e) {
    const {
      name
    } = e.currentTarget.dataset
    const {
      value
    } = e.detail
    clearTimeout(this.timeID);
    //清楚timeID对应的定时器，即取消相应函数的执行 
    this.timeID = setTimeout(() => {
      if (name == 'realName') {
        this.setData({
          "personInfo.realName": value
        })
      } else {
        this.setData({
          "personInfo.identityNo": value
        })
      }
    }, 1000)
  },
  //上传身份证证件 
  uploadImage() {
    //调用wx.chooseMedia API打开图片选择窗口 
    wx.chooseMedia({
      count: 1,
      mediaType: ['image'],
      sourceType: ['album', 'camera'],
      sizeType: ['original', 'compressed'],
      success: (res) => {
        //chooseMedia成功回调 
        wx.showLoading({
          title: '上传中'
        })
        //使用wx.uploadFile将图片发至服务端上传 
        wx.uploadFile({
          filePath: res.tempFiles[0].tempFilePath,
          //文件暂存路径 
          name: 'img',//文件对应的key 
          url: `${app.globalData.server}/uploadImg`,//服务端路由 
          success: (result) => { //成功回调 
            //result.data为字符串，使用JSON.parse转成对象 
            let filePath = JSON.parse(result.data).path;
            //文件路径为\反斜杠，需要转为斜杠/，使用正则表达式进行过滤转换 
            filePath = filePath.replace(/\\/g, '/');
            //console.log(filePath) 
            let personInfo = this.data.personInfo;
            //将完整的文件路径（含有域名信息）赋值给personInfo 
            personInfo.identityImg = `${app.globalData.server}/${filePath}`;
            this.setData({
              personInfo
            })
            wx.hideLoading({})
            wx.showToast({
              title: '上传成功',
              icon: "success"
            })
          },
          fail: (e) => {
            //失败回调 
            console.log(e)
            wx.hideLoading({})
            wx.showToast({
              title: '上传失败',
              icon: "error"
            })
          }
        })
      },
      fail: error => {
        //chooseMedia失败回调 
        console.log(error)
        wx.showToast({
          title: '上传失败',
          icon: "error"
        })
      }
    })
  },
  //电子协议书弹窗 
  showProtocal() {
    this.setData({
      showProtocal: true
    })
  },
  //点击阅读并同意 
  checkboxChange(e) {
    if (e.detail.value.includes('1')) {
      this.setData({
        check: true,
      });
    } else {
      this.setData({
        check: false,
      });
    }
  },

  //常见问题说明 
  showQuestion() {
    wx.showModal({
      title: '常见问题说明',
      content: '1、证件号指学生证上的号码。\n2、相关证件正面指的学生证正面。\n3、需 要加急请点击微信客服添加好友加急申请。',
      showCancel: false
    })
  },

  //复制管理员微信 
  copyWX() {
    wx.setClipboardData({
      data: '13677077342',
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.setData({
      avatarUrl: app.globalData.userInfo.avatarUrl
    })
    //加载表单验证规则 
    this.initValidate();
  },
  //初始化验证规则 
  initValidate() {
    // 验证字段的规则 
    const rules = {
      realName: {
        required: true,
        maxlength: 10
      },
      identityNo: {
        required: true,
        maxlength: 20
      },
      identityImg: {
        required: true
      }
    }
    // 验证字段的提示信息，若不传则调用默认的信息 
    const messages = {
      realName: {
        required: '请输入真实姓名',
        maxlength: '姓名不能超过10个字符'
      },
      identityNo: {
        required: '请输入你的证件号',
        maxlength: '证件号码不能超过20个字符'
      },
      identityImg: {
        required: '请上传证件正面照片！'
      }
    }
    // 创建实例对象 
    this.WxValidate = new WxValidate(rules, messages)
  },
  //表单验证错误提示 
  showValidateModal(error) {
    wx.showModal({
      content: error.msg,
      showCancel: false,
    })
  },
  //提交表单 
  submitForm() {
    const {personInfo} = this.data
    //表单验证 
    if (!this.WxValidate.checkForm(personInfo)) {
      const error = this.WxValidate.errorList[0];
      this.showValidateModal(error);
      return false;
    }
    //判断是否勾选 阅读并同意《相关条款》 
    if (!this.data.check) {
      this.setData({
        msg: true,//震动提示 阅读并同意 
      });
      const that = this;
      setTimeout(() => {
        that.setData({
          msg: false,//关闭震动提示 
        });
      }, 320);
      return
    }
    //加载中 
    wx.showLoading()
    personInfo.applyTime = formatTime(new Date())
    //表单验证完毕，接下来向后端发送数据 
    wx.request({
      url: `${app.globalData.server}/wxApplyOrder`,
      method: 'POST',
      data: {
        openid: app.globalData.userInfo.openid,
        personInfo
      },
      success: res => {
        console.log(res)
        wx.hideLoading()
        if (res.data === 'success') {
          //提示 
          wx.showToast({
            title: '提交成功',
            icon: 'success'
          })
          //跳转至个人中心页面 
          setTimeout(() => {
            wx.switchTab({
              url: '../person/person',
            })
          }, 1000)
        } else {
          //提示 
          wx.showToast({
            title: '提交失败',
            icon: 'error'
          })
        }
      },
      fail: err => {
        wx.hideLoading()
        console.log(err)
        //提示 
        wx.showToast({
          title: '提交失败',
          icon: 'error'
        })
      }
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})